package com.qiaoba.module.system.service;

import com.qiaoba.api.auth.entity.dto.RoleDTO;
import com.qiaoba.api.system.entity.vo.SysRoleVO;
import com.qiaoba.api.system.entity.vo.SysUserVO;
import com.qiaoba.module.system.entity.SysUserRole;
import com.qiaoba.module.system.entity.param.SysUserRoleParam;

import java.util.List;
import java.util.Set;

/**
 * 用户角色关联 服务层
 *
 * @author ailanyin
 * @version 1.0
 * @since 2023/5/9 9:50
 */
public interface SysUserRoleService {

    /**
     * 更新用户角色绑定关系
     *
     * @param userId   userId
     * @param roleIds  roleIds
     * @param isUpdate 是否是更新操作
     */
    void updateUserRole(String userId, Set<String> roleIds, boolean isUpdate);

    /**
     * 批量新增
     *
     * @param list list
     */
    void insertBatch(List<SysUserRole> list);

    /**
     * 通过userId批量删除
     *
     * @param userId userId
     */
    void deleteByUserId(String userId);

    /**
     * 通过userIds删除
     *
     * @param userIds userIds
     */
    void deleteByUserIds(List<String> userIds);

    /**
     * 批量取消角色所绑定的用户
     *
     * @param roleId  roleId
     * @param userIds userIds
     */
    void deleteByRoleIdAndUserIds(String roleId, List<String> userIds);

    /**
     * 通过userId查询所绑定的角色ID列表
     *
     * @param userId userId
     * @param status 状态
     * @return roleIds
     */
    List<String> selectRoleIdsByUserId(String userId, String status);

    /**
     * 通过用户ID查询角色列表
     *
     * @param userId 用户ID
     * @param status 角色状态
     * @return SysRoleVO
     */
    List<SysRoleVO> selectRolesByUserId(String userId, String status);

    /**
     * 通过userId查询所绑定的角色(id + dbName)列表
     *
     * @param userId userId
     * @param status 状态
     * @return roles
     */
    List<RoleDTO> selectRoleDtoByUserId(String userId, String status);

    /**
     * 批量选择用户授权
     *
     * @param roleId  roleId
     * @param userIds userIds
     */
    void insertAuthUsers(String roleId, List<String> userIds);

    /**
     * 查询用户拥有的角色
     *
     * @param userId userId
     * @return 角色 逗号拼接
     */
    String selectRoleGroup(String userId);

    /**
     * 查询角色已绑定的用户列表
     *
     * @param param 条件
     * @return 用户集合
     */
    List<SysUserVO> selectAllocatedList(SysUserRoleParam param);

    /**
     * 查询角色未绑定的用户列表
     *
     * @param param 条件
     * @return 用户集合
     */
    List<SysUserVO> selectUnallocatedList(SysUserRoleParam param);
}
